<template>
    <div class="body">
        <el-form :rules="rules" ref="loginForm" :model="loginForm" class="loginContainer">
            <h3 class="loginTitle">欢迎登录</h3>
            <el-form-item prop="username">
                <el-input type="text" v-model="loginForm.username" placeholder="亲，请输入用户名"></el-input>
            </el-form-item>
            <el-form-item prop="password">
                <el-input type="password" v-model="loginForm.password" placeholder="亲，请输入密码" ></el-input>
            </el-form-item>
            <el-form-item prop="code">
                <el-input type="text" auto-complete="false" v-model="loginForm.code" placeholder="点击图片更换验证码" style="width: 250px;margin-right: 5px"></el-input>
                <img :src="captchaUrl">
            </el-form-item>
            <el-checkbox v-model="checked" class="loginRemember">记住我</el-checkbox>
            <el-button type="primary" style="width:100%" @click="submitLogin">登录</el-button>
        </el-form>
    </div>
</template>

<script>
import {login,userInfo} from '@/api/commonApi'
import {asyncRouterMap} from '@/router/index'
import {getAccessedRouters} from '@/api/permission'


export default {
    name: "Login",
    data() {
      return {
          captchaUrl: "",
          loginForm: {
              username:"",
              password:"",
              code:''
          },
          checked: true,
          rules:{
            username:[
                {required: true, message: "请输入用户名",trigger: "blur"},
                {min:5, max:14, message: '长度在 5 到 14 个字符', trigger: 'blur'}
            ],
            password:[
                {required: true, message: "请输入密码", trigger: "blur"},
                {min:6,  message: '密码长度要大于6', trigger: 'blur' }
            ],
            code:[
                {required: true, message: "请输入验证码", trigger: "blur"}
            ],
          }
      }
    },
    
    methods:{
        submitLogin() {
            this.$refs.loginForm.validate((valid) => {
                if (valid) {
                    const params = {
                        username: this.loginForm.username,
                        password: this.loginForm.password
                    };
                    login(params).then(resp => {
                        console.log(resp);
                        let data = resp.data;
                        if (data.code == 200) {
                            let token = data.data;
                            localStorage.setItem("web-token", token);
                            // 获取用户信息
                            this.queryUserInfo();
                            // 跳转首页
                            this.$router.push('/home')
                        } else {
                            this.$message({
                                message: data.message,
                                type: 'warning'
                            });
                        }
                    })     
                } else {
                    this.$message.error('登录出错请重新输入');
                    return false;
                }
          });
        },
        queryUserInfo() {
            // 获取用户信息
            userInfo().then(resp => {
                let data = resp.data.data;
                let menus = data.menus;  
                console.log(data);
                this.$message({
                    message: '欢迎您' + data.username,
                    type: 'success'
                });
                let accessedRouters = getAccessedRouters(asyncRouterMap, menus);
                // console.log(accessedRouters);
                let localAccessedRouters = JSON.parse(localStorage.getItem('userMenus'));
                //console.log(localAccessedRouters);
                // 将这些添加到路由
                // this.$router.addRoutes(accessedRouters);
                // this.$router.options.routes = this.$router.options.routes.concat(accessedRouters)
            })
        },
    }
};
</script>

<style>
    .loginContainer{
        border-radius: 15px;
        background-clip: padding-box;
        text-align: left;
        margin: auto;
        margin-top: 180px;
        width: 350px;
        padding: 15px 35px 15px 35px;
        background: aliceblue;
        border:1px solid blueviolet;
        box-shadow: 0 0 25px #f885ff;
    }
    .loginTitle{
        margin: 0px auto 48px auto;
        text-align: center;
        font-size: 40px;
    }
    .loginRemember{
        text-align: left;
        margin: 0px 0px 15px 0px;
    }
    .body{
        width: 100vw;
        height: 100vh;
        background-image: url("../assets/background.png") ;
        background-size:100%;
       overflow: hidden;
    }
</style>


